package main

import "fmt"

// 闭包 = 函数绑定了外部变量
// 只要这个函数还能使用，这个变量的生命周期还没结束

/* 函数add的返回值是一个函数，其内部的返回值是一个整数 */
func add() func(i int) int {
	a := 4 // 通过闭包将局部变量设置为全局变量
	return func(i int) int {
		a = a + i
		return a
	}
}

func main() {
	f := add() // f就是一个闭包函数
	for i := 0; i < 3; i++ {
		fmt.Println(f(i))
		/*
			4 --> a = 4+0
			5 --> a = 4+1
			7 --> a = 5+2
		*/
	}

}
